package cn.iocoder.yudao.module.dbit.dal.mysql.jobresumeinfo;

import java.util.*;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
import cn.iocoder.yudao.module.dbit.dal.dataobject.jobresumeinfo.JobResumeInfoDO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.dbit.controller.admin.jobresumeinfo.vo.*;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.util.CollectionUtils;

/**
 * 简历投递 Mapper
 *
 * @author 芋道源码
 */
@Mapper
public interface JobResumeInfoMapper extends BaseMapperX<JobResumeInfoDO> {

    default PageResult<JobResumeInfoDO> selectPage(JobResumeInfoPageReqVO reqVO, List<Integer> jobIds) {
        if (reqVO.getJobId() == null) {
            return selectPage(reqVO, new LambdaQueryWrapperX<JobResumeInfoDO>()
                    .eqIfPresent(JobResumeInfoDO::getJobResumeStatus, reqVO.getJobResumeStatus())
                    .in(!CollectionUtils.isEmpty(jobIds), JobResumeInfoDO::getJobId, jobIds)
                    .orderByDesc(JobResumeInfoDO::getCreateTime));
        }
        return selectPage(reqVO, new LambdaQueryWrapperX<JobResumeInfoDO>()
                .eqIfPresent(JobResumeInfoDO::getJobResumeStatus, reqVO.getJobResumeStatus())
                .eqIfPresent(JobResumeInfoDO::getJobId, reqVO.getJobId())
                .orderByDesc(JobResumeInfoDO::getCreateTime));
    }

    default PageResult<JobResumeInfoDO> selectStudentPage(JobResumeInfoPageReqVO reqVO) {
        if (reqVO.getJobResumeStatus() == 0) {
            // 查询未查看投递记录
            return selectPage(reqVO, new LambdaQueryWrapperX<JobResumeInfoDO>()
                    .eqIfPresent(JobResumeInfoDO::getResumeUserId, reqVO.getUserId())
                    .eqIfPresent(JobResumeInfoDO::getJobResumeStatus, 1)
                    .eqIfPresent(JobResumeInfoDO::getJobId, reqVO.getJobId())
                    .orderByDesc(JobResumeInfoDO::getCreateTime));
        } else if (reqVO.getJobResumeStatus() == 1) {
            // 查询所有已读的投递记录
            return selectPage(reqVO, new LambdaQueryWrapperX<JobResumeInfoDO>()
                    .eqIfPresent(JobResumeInfoDO::getResumeUserId, reqVO.getUserId())
                    .eqIfPresent(JobResumeInfoDO::getJobResumeStatus, 0)
                    .eqIfPresent(JobResumeInfoDO::getJobId, reqVO.getJobId())
                    .orderByDesc(JobResumeInfoDO::getCreateTime));
        } else {
            return selectPage(reqVO, new LambdaQueryWrapperX<JobResumeInfoDO>()
                    .eqIfPresent(JobResumeInfoDO::getResumeUserId, reqVO.getUserId())
                    .eqIfPresent(JobResumeInfoDO::getJobResumeStatus, reqVO.getJobResumeStatus())
                    .eqIfPresent(JobResumeInfoDO::getJobId, reqVO.getJobId())
                    .orderByDesc(JobResumeInfoDO::getCreateTime));
        }
    }


    void updateJobResumeInfoStatus(@Param("id") Integer id, @Param("status") Integer status);


    IPage<JobResumeInfoDO> getList(IPage<JobResumeInfoDO> page, @Param("reqVO") JobResumeInfoPageReqVO reqVO, @Param("jobIds") List<Integer> jobIds);


    @TenantIgnore
    Integer getJobDeliveryNum(Integer jobId);
}